//////////////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2014-present, Egret Technology.
//  All rights reserved.
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of the Egret nor the
//       names of its contributors may be used to endorse or promote products
//       derived from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
//  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
//  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
//  IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
//  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////

class Main extends egret.DisplayObjectContainer {



    public constructor() {
        super();
        this.addEventListener(egret.Event.ADDED_TO_STAGE, this.onAddToStage, this);
    }

    private onAddToStage(event: egret.Event) {

        egret.lifecycle.addLifecycleListener((context) => {
            // custom lifecycle plugin

            context.onUpdate = () => {

            }
        })

        egret.lifecycle.onPause = () => {
            egret.ticker.pause();
        }

        egret.lifecycle.onResume = () => {
            egret.ticker.resume();
        }

        this.runGame().catch(e => {
            egret.log(e);
        })



    }

    private async runGame() {
        if (!Main._DEBUG) {
            FBInstant.initializeAsync()
                .then((ret) => {
                    this.runGameex();
                });
        } else {
            this.runGameex();
        }

    }

    private async runGameex() {
        if (Main._WITHAD) {
            FacebookAd.preLoadInterstitialAd(this.OnInterstitialAdLoadOk);
            FacebookAd.preLoadRewardedVideoAd(this.OnRewardedVideoAdLoadOk);
        }

        await this.loadResource()
        this.createGameScene();
        const result = await RES.getResAsync("description_json")
        //this.startAnimation(result);
        await platform.login();
        const userInfo = await platform.getUserInfo();
        egret.log(userInfo);
    }

    private async loadResource() {
        try {
            const loadingView = new LoadingUI();
            this.stage.addChild(loadingView);
            await RES.loadConfig("resource/default.res.json", "resource/");
            await RES.loadGroup("preload", 0, loadingView);
            this.stage.removeChild(loadingView);
        }
        catch (e) {
            console.error(e);
        }
    }

    private textfield: egret.TextField;

    /**
     * 创建游戏场景
     * Create a game scene
     */
    private createGameScene() {
        if (!Main._DEBUG) {
            FBInstant.setLoadingProgress(100);
            FBInstant.startGameAsync()
                .then(() => {
                    SoundUtils.instance().initSound();
                    let gameScene = new GameBackGround();
                    this.addChild(gameScene);
                });
        } else {
            SoundUtils.instance().initSound();
            let gameScene = new GameBackGround();
            this.addChild(gameScene);
        }

    }

    private OnInterstitialAdLoadOk() {
        egret.log("OnInterstitialAdLoadOk11: ", FacebookAd.InterstitialAdLoadState)
        FacebookAd.InterstitialAdLoadState = 1;
    }

    private OnRewardedVideoAdLoadOk() {
        egret.log("OnRewardedVideoAdLoadOk22: ", FacebookAd.RewardedVideoAdLoadState)
        FacebookAd.RewardedVideoAdLoadState = 1;
    }

    public static _DEBUG: boolean = false;
    public static _WITHAD: boolean = false;
}